/** ****************************************************************************
 * @file 	module.h
 * @author 	mojinpan
 * @copyright (c) 2018-2020 mojinpan. All rights reserved.
 * @brief 	模块
 *
 * @version 	V1.0
 * @date 	2020-05-02
 * @details
 * 1.初稿
 *******************************************************************************/
#ifndef __MODULE_H
#define __MODULE_H

#include <tbox/main/module.h>
#include <tbox/main/context.h>  
#include <tbox/base/json.hpp>   
#include <tbox/util/json.h>     
#include "comm/comm.h"
#include "context.h"

namespace bas
{
    class Module : public tbox::main::Module, public comm_adapter::Comm::Parent
    {
    public:
        explicit Module(const std::string &name, Context &ctx);
        virtual ~Module();

        // 用户注册模块的接口
        template <typename T, typename... Args>
        void addModule(const std::string &moduleName, Context &ctx, Args &&...args)
        {
            add(new T(moduleName, ctx, std::forward<Args>(args)...));
        }

        // 通讯协议通用接收函数
        virtual void onRecv(const std::string &type, const void *data_ptr, size_t data_size) override;

    protected:
        // ！！！下面是tbox系统接口，用户最好不要重写，否则不能注册通讯协议
        virtual void onFillDefaultConfig(tbox::Json &js_this) override;
        virtual bool onInit(const tbox::Json &js_this) override;
        virtual bool onStart() override;
        virtual void onStop() override;

    private:
        std::string moduleName;
        Context &m_ctx;
        std::string parent;
    };
}

#endif
/*********************************END OF FILE**********************************/
